#include "head.h"

void* func(void *p){
    threads * statu = (threads*)p;
    while(1){
               
        pthread_mutex_lock(&statu->lock);
    //    Queue que = statu->queue;
        while(statu->queue.size==0){
            pthread_cond_wait(&statu->cont,&statu->lock);
        }
        
        int netfd=statu->queue.head->net_fd;
        pop_queue(&statu->queue);
        pthread_mutex_unlock(&statu->lock);
        
        sendFile(netfd);
        close(netfd);
    
    }
    return NULL;
}

    
int sendFile(int net_fd){

    // 1.txt
    char *file_name = "3.txt";
    int file_fd = open(file_name, O_RDWR);

    // 先发送文件大小: 获得文件大小
    struct stat st;
    fstat(file_fd, &st);

    int ret_send =send(net_fd, &st.st_size, sizeof(off_t), MSG_NOSIGNAL);
    ERROR_CHECK(ret_send,-1,"ret_send");

    int len = strlen(file_name);
    // 先写给客户端: int类型的文件名的长度    文件名
   int len_ret= send(net_fd, &len, sizeof(int), 0);
    ERROR_CHECK(len_ret,-1,"len_ret"); 
   int name_ret=send(net_fd, file_name, len, 0);
    ERROR_CHECK(name_ret,-1,"name_ret");


    // 零拷贝
    int ret_file=sendfile(net_fd, file_fd, 0, st.st_size);
    ERROR_CHECK(ret_file,-1,"ret_file");

    close(file_fd);

    return 0;
}
